package main

import (
	"fmt"
	"reflect"
	"time"
)

func main() {
	//声明int型变量intchan,缓冲区大小为2
	var intChan = make(chan int, 2)
	//输出intChan变量的值和类型
	fmt.Println(intChan, reflect.TypeOf(intChan), len(intChan), cap(intChan))
	//将整形值100通过intchan的通道发送
	intChan <- 100
	fmt.Println(len(intChan), cap(intChan))
	intChan <- 200
	fmt.Println(len(intChan), cap(intChan))
	go intChanRecvListener1(intChan)
	time.Sleep(2 * time.Second)
	//关闭intchan通道
	close(intChan)
}

func intChanRecvListener1(intChan chan int) {
	//读取intChan通道中的值,并将结果赋值给intvalue的变量
	intValue := <-intChan
	//输出intValue变量的值和类型
	fmt.Println(intValue, reflect.TypeOf(intValue))
	fmt.Println("成功接受第一个1的值,", len(intChan), cap(intChan))
	intValue = <-intChan
	//输出initVale的变量的值和类型
	fmt.Println(intValue, reflect.TypeOf(intValue))
	fmt.Println("成功接受2个值", len(intChan), cap(intChan))
}
